package cl.tinet.reservaCD.usuario;

import java.util.ArrayList;

import javax.ejb.Remote;

import cl.tinet.reservaCD.exception.UsuarioExisteException;
import cl.tinet.reservaCD.exception.UsuarioNoExisteException;
import cl.tinet.reservaCD.exception.UsuarioPassworIncorrectaException;
import cl.tinet.reservaCD.modelo.Usuario;

/**
 * Clase interface del ben del usuario.
 * 
 * @author Carlo Duque
 */
@Remote
public interface UsuarioBean {

    /**
     * Metodo crear un nuevo usuario en la base de datos.
     * 
     * @param usuarioCrear
     *            nuevo usuario en la base de datos.
     * @throws UsuarioExisteException
     *             ver si usuario existe.
     */
    void crearUsuario(Usuario usuarioCrear) throws UsuarioExisteException;

    /**
     * Metodo eliminar usuario en la base de datos.
     * 
     * @param usuarioEliminar
     *            usuario que se va a eliminar en la base de datos.
     * @throws UsuarioNoExisteException
     *             ver si el usuario no existe.
     */
    void eliminarUsuario(Usuario usuarioEliminar)
            throws UsuarioNoExisteException;

    /**
     * Metodo que actualiza un usuario en la base de datos.
     * 
     * @param usuarioActualizar
     *            usuario que se va a actualizar.
     * @throws UsuarioNoExisteException
     *             ver si el usuario no existe.
     */
    void actualizarUsuario(Usuario usuarioActualizar)
            throws UsuarioNoExisteException;

    /**
     * Metodo que busca un usuario en la base de datos.
     * 
     * @param usuarioBusqueda
     *            usuario a buscar en la base de datos.
     * @return usuario encontrado en la base de datos
     * @throws UsuarioNoExisteException
     *             ver si el usuario no existe.
     */
    Usuario buscarUsuario(Usuario usuarioBusqueda);

    /**
     * Metodo que lista los usuario que estan en la base de datos.
     * 
     * @return un lista de usuarios encontrados.
     */
    ArrayList<Usuario> listaUsuario();

    /**
     * Metodo para validar login.
     * 
     * @param usuarioBusqueda
     *            usuario a buscar
     * @return null o el usuario que encontro.
     * @throws UsuarioPassworIncorrectaException
     *             clave incorrecta.
     */
    Usuario validarUsuario(Usuario usuarioBusqueda)
            throws UsuarioPassworIncorrectaException;

}
